- <association> 可以用于将查询结果集中的一组列映射到另一个Java对象的属性上,处理“一对一”类型的关系。
- 比如,以下示例中一个博客有一个用户。 关联映射就工作于这种结果之上。
示例
<resultMap id="userMap"
type="User">
<id property="id"
column="id"></id>
<result property="username"
column="username"></result>
<result
property="password"
column="password"></result>
<result
property="address"
column="address"></result>
<result
property="email" column="email"></result>
<association property="role" javaType="Role">
<id
property="id" column="role_id"></id>
<result
property="name" column="role_name"></result>
</association>
</resultMap>
属性 |
描述 |
column |
来自数据库的列名,或重命名的列标签。这和通常传递给 resultSet.getString(columnName)方法的字符串是相同的。 column 注 意 : 要 处 理 复 合 主 键 , 你 可 以 指 定 多 个 列 名 通 过 column= ” {prop1=col1,prop2=col2} ” 这种语法来传递给嵌套查询语 句。 这会引起 prop1 和 prop2 以参数对象形式来设置给目标嵌套查询语句。 |
property |
映射到实体类结果的字段或属性。如果用来匹配的 JavaBeans 存在给定名字的属性,那么它将会被使用。 否则 MyBatis 将会寻找与给定名称相同的字段。 这两种情形你可以使用通常点式的复杂属性导航。 比如,你可以这样映射 一 些 东 西 :“ username ”, 或 者 映 射 到 一 些 复 杂 的 东 西 : “address.street.number” 。 |
javaType |
指向一个 Java 实体类中的字段或属性,或一个类型别名, 属性可以是(int,String,Role) 如果你映射到一个 JavaBean,MyBatis 通常可以断定类型。 然而,如 javaType 果你映射到的是 HashMap,那么你应该明确地指定 javaType 来保证所需的行为。 |
select |
另外一个映射语句的 ID,可以加载这个属性映射需要的复杂类型。获取的 在列属性中指定的列的值将被传递给目标 select 语句作为参数。 select 注 意 : 要 处 理 复 合 主 键 , 你 可 以 指 定 多 个 列 名 通 过 column= ” {prop1=col1,prop2=col2} ” 这种语法来传递给嵌套查询语 句。 这会引起 prop1 和 prop2 以参数对象形式来设置给目标嵌套查询语句。 |
fetchType |
可选的。有效值为 lazy和eager。 如果使用了,它将取代全局配置参数lazyLoadingEnabled。 |
foreignColumn |
指定外键对应的列名,指定的列将与父类型中 column 的给出的列进行匹配。 |
resultSet |
指定用于加载复杂类型的结果集名字。 |
jdbcType |
在这个表格之前的所支持的 JDBC 类型列表中的类型。JDBC 类型是仅仅 需要对插入, 更新和删除操作可能为空的列进行处理。 这是 JDBC 的需要, jdbcType 而不是 MyBatis 的。如果你直接使用 JDBC 编程,你需要指定这个类型-但 仅仅对可能为空的值。 |
typeHandler |
使用这个属性,你可以覆盖默认的 typeHandler 类型处理器。 这个属性值是类的完全限定名或者是一个类型处理器的实现, 或者是类型别名。 |
resultMap |
用于嵌套外部resultMap结果集 |
notNullColumn |
用于指定关联对象的某个属性不为null时,才会将查询结果映射到Java对象上 |
autoMapping |
autoMapping 属性用于指示 Mybatis 是否自动映射关联对象中的属性。 具体来说,如果 autoMapping 属性值为 true,Mybatis 将自动映射关联对象中的属性,否则需要手动设置 SQL 语句来进行映射 |